In [1]:
# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

# Input data files are available in the read-only "../input/" directory
# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory

import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using "Save & Run All" 
# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session
/kaggle/input/dlmia-hw05-test/train.csv
/kaggle/input/dlmia-hw05-test/test.csv
/kaggle/input/dlmia-hw05-test/test_images/029.jpg
/kaggle/input/dlmia-hw05-test/test_images/014.jpg
/kaggle/input/dlmia-hw05-test/test_images/109.jpg
/kaggle/input/dlmia-hw05-test/test_images/034.jpg
/kaggle/input/dlmia-hw05-test/test_images/024.jpg
/kaggle/input/dlmia-hw05-test/test_images/033.jpg
/kaggle/input/dlmia-hw05-test/test_images/094.jpg
/kaggle/input/dlmia-hw05-test/test_images/049.jpg
/kaggle/input/dlmia-hw05-test/test_images/048.jpg
/kaggle/input/dlmia-hw05-test/test_images/080.jpg
/kaggle/input/dlmia-hw05-test/test_images/062.jpg
/kaggle/input/dlmia-hw05-test/test_images/067.jpg
/kaggle/input/dlmia-hw05-test/test_images/106.jpg
/kaggle/input/dlmia-hw05-test/test_images/113.jpg
/kaggle/input/dlmia-hw05-test/test_images/006.jpg
/kaggle/input/dlmia-hw05-test/test_images/066.jpg
/kaggle/input/dlmia-hw05-test/test_images/011.jpg
/kaggle/input/dlmia-hw05-test/test_images/002.jpg
/kaggle/input/dlmia-hw05-test/test_images/036.jpg
/kaggle/input/dlmia-hw05-test/test_images/069.jpg
/kaggle/input/dlmia-hw05-test/test_images/089.jpg
/kaggle/input/dlmia-hw05-test/test_images/025.jpg
/kaggle/input/dlmia-hw05-test/test_images/076.jpg
/kaggle/input/dlmia-hw05-test/test_images/028.jpg
/kaggle/input/dlmia-hw05-test/test_images/012.jpg
/kaggle/input/dlmia-hw05-test/test_images/085.jpg
/kaggle/input/dlmia-hw05-test/test_images/112.jpg
/kaggle/input/dlmia-hw05-test/test_images/056.jpg
/kaggle/input/dlmia-hw05-test/test_images/101.jpg
/kaggle/input/dlmia-hw05-test/test_images/051.jpg
/kaggle/input/dlmia-hw05-test/test_images/047.jpg
/kaggle/input/dlmia-hw05-test/test_images/018.jpg
/kaggle/input/dlmia-hw05-test/test_images/027.jpg
/kaggle/input/dlmia-hw05-test/test_images/079.jpg
/kaggle/input/dlmia-hw05-test/test_images/068.jpg
/kaggle/input/dlmia-hw05-test/test_images/010.jpg
/kaggle/input/dlmia-hw05-test/test_images/064.jpg
/kaggle/input/dlmia-hw05-test/test_images/001.jpg
/kaggle/input/dlmia-hw05-test/test_images/075.jpg
/kaggle/input/dlmia-hw05-test/test_images/042.jpg
/kaggle/input/dlmia-hw05-test/test_images/087.jpg
/kaggle/input/dlmia-hw05-test/test_images/015.jpg
/kaggle/input/dlmia-hw05-test/test_images/105.jpg
/kaggle/input/dlmia-hw05-test/test_images/086.jpg
/kaggle/input/dlmia-hw05-test/test_images/072.jpg
/kaggle/input/dlmia-hw05-test/test_images/111.jpg
/kaggle/input/dlmia-hw05-test/test_images/017.jpg
/kaggle/input/dlmia-hw05-test/test_images/088.jpg
/kaggle/input/dlmia-hw05-test/test_images/007.jpg
/kaggle/input/dlmia-hw05-test/test_images/057.jpg
/kaggle/input/dlmia-hw05-test/test_images/005.jpg
/kaggle/input/dlmia-hw05-test/test_images/063.jpg
/kaggle/input/dlmia-hw05-test/test_images/070.jpg
/kaggle/input/dlmia-hw05-test/test_images/103.jpg
/kaggle/input/dlmia-hw05-test/test_images/004.jpg
/kaggle/input/dlmia-hw05-test/test_images/021.jpg
/kaggle/input/dlmia-hw05-test/test_images/084.jpg
/kaggle/input/dlmia-hw05-test/test_images/095.jpg
/kaggle/input/dlmia-hw05-test/test_images/104.jpg
/kaggle/input/dlmia-hw05-test/test_images/078.jpg
/kaggle/input/dlmia-hw05-test/test_images/090.jpg
/kaggle/input/dlmia-hw05-test/test_images/093.jpg
/kaggle/input/dlmia-hw05-test/test_images/039.jpg
/kaggle/input/dlmia-hw05-test/test_images/050.jpg
/kaggle/input/dlmia-hw05-test/test_images/071.jpg
/kaggle/input/dlmia-hw05-test/test_images/100.jpg
/kaggle/input/dlmia-hw05-test/test_images/107.jpg
/kaggle/input/dlmia-hw05-test/test_images/065.jpg
/kaggle/input/dlmia-hw05-test/test_images/038.jpg
/kaggle/input/dlmia-hw05-test/test_images/003.jpg
/kaggle/input/dlmia-hw05-test/test_images/092.jpg
/kaggle/input/dlmia-hw05-test/test_images/061.jpg
/kaggle/input/dlmia-hw05-test/test_images/073.jpg
/kaggle/input/dlmia-hw05-test/test_images/102.jpg
/kaggle/input/dlmia-hw05-test/test_images/031.jpg
/kaggle/input/dlmia-hw05-test/test_images/041.jpg
/kaggle/input/dlmia-hw05-test/test_images/081.jpg
/kaggle/input/dlmia-hw05-test/test_images/020.jpg
/kaggle/input/dlmia-hw05-test/test_images/037.jpg
/kaggle/input/dlmia-hw05-test/test_images/022.jpg
/kaggle/input/dlmia-hw05-test/test_images/032.jpg
/kaggle/input/dlmia-hw05-test/test_images/096.jpg
/kaggle/input/dlmia-hw05-test/test_images/058.jpg
/kaggle/input/dlmia-hw05-test/test_images/046.jpg
/kaggle/input/dlmia-hw05-test/test_images/074.jpg
/kaggle/input/dlmia-hw05-test/test_images/098.jpg
/kaggle/input/dlmia-hw05-test/test_images/054.jpg
/kaggle/input/dlmia-hw05-test/test_images/026.jpg
/kaggle/input/dlmia-hw05-test/test_images/052.jpg
/kaggle/input/dlmia-hw05-test/test_images/019.jpg
/kaggle/input/dlmia-hw05-test/test_images/082.jpg
/kaggle/input/dlmia-hw05-test/test_images/055.jpg
/kaggle/input/dlmia-hw05-test/test_images/077.jpg
/kaggle/input/dlmia-hw05-test/test_images/110.jpg
/kaggle/input/dlmia-hw05-test/test_images/030.jpg
/kaggle/input/dlmia-hw05-test/test_images/083.jpg
/kaggle/input/dlmia-hw05-test/test_images/035.jpg
/kaggle/input/dlmia-hw05-test/test_images/023.jpg
/kaggle/input/dlmia-hw05-test/test_images/009.jpg
/kaggle/input/dlmia-hw05-test/test_images/045.jpg
/kaggle/input/dlmia-hw05-test/test_images/059.jpg
/kaggle/input/dlmia-hw05-test/test_images/097.jpg
/kaggle/input/dlmia-hw05-test/test_images/043.jpg
/kaggle/input/dlmia-hw05-test/test_images/060.jpg
/kaggle/input/dlmia-hw05-test/test_images/108.jpg
/kaggle/input/dlmia-hw05-test/test_images/099.jpg
/kaggle/input/dlmia-hw05-test/test_images/008.jpg
/kaggle/input/dlmia-hw05-test/test_images/091.jpg
/kaggle/input/dlmia-hw05-test/test_images/053.jpg
/kaggle/input/dlmia-hw05-test/test_images/013.jpg
/kaggle/input/dlmia-hw05-test/test_images/016.jpg
/kaggle/input/dlmia-hw05-test/test_images/044.jpg
/kaggle/input/dlmia-hw05-test/test_images/040.jpg
/kaggle/input/dlmia-hw05-new/train.json
/kaggle/input/dlmia-hw05-new/train.csv
/kaggle/input/dlmia-hw05-new/test.csv
/kaggle/input/dlmia-hw05-new/val.json
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/A0_0.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/10_2 (2).jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/A0_1.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/220 (2).jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/10_2.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/10_1 (2).jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/A0_5.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/A0_3.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/10_1.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/10_4.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/A0_6.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/4440_2.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/220_1.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/10_0 (2).jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/A0.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/4440_0.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/10_3 (2).jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/220_6.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/4440.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/220.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/220_3.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/220_4.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/10 (2).jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/A0_2.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/4440_1.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/220_5.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/10_3.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/4440_4.jpg
/kaggle/input/dlmia-hw05-new/intercostal_pleural_thickening/10_0.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_9.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_6 (2).jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_2 (2).jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_5 (2).jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_11 (2).jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_8.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/220_2.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_19.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_2.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_20.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_5.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_2.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_1 (2).jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_16.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_0.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_7.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_9.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_1.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_4.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_16.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_11.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_11.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/220_1.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_23.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_0 (2).jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_12.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_17.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/4440_0.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_12.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_5.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_0.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_9.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_6.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_8.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_13.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_10.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_1.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_3 (2).jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_18.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/220_0.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_7 (2).jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_4 (2).jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/220_3.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_12.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_3.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_2.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_6.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_13.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_4.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_8 (2).jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_6.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_8.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10 (2).jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_21.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_3.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_13.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/4440_5.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/4440_1.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_7.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_3.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_7.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_15.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/4440_4.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/10_0.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/Volume0_1.jpg
/kaggle/input/dlmia-hw05-new/lung_field_infiltration/FILE0_10.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_12.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/Volume0_5.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/4440_7.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_15.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/4440_14.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_8.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/Volume0.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_2.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_9.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/4440_6.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_5.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_2.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/FILE0_0.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_10.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/4440_12.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_7.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_1.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_4.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_11.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_1.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_12.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/FILE0.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/FILE0_5.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/FILE0_4.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/4440_9.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_11.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_6.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_7.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_13.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_10.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/FILE0_1.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_6.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_0.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/4440.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/4440_15.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/Volume0_3.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/FILE0_2.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_4.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/FILE0_6.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/Volume0_4.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_14.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/4440_8.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/FILE0_3.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/4440_5.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/4440_1.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/220_5.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/FILE0_7.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_3.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/10_0.jpg
/kaggle/input/dlmia-hw05-new/aortic_curvature/Volume0_1.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_1 (2)d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/Volume0c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_2d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/Volume0_5c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/220_0a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/220 (2)d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_0 (2)d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/220_2a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_5a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_11a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/4440a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/Volume0_0c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/Volume0b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_3d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0_5c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10 (2)d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_12a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_9a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/Volume0_2c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/220_0b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0_0c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/4440_0d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/220_3a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0_0b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/4440_3a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_4d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_5d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/A0d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0_3c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0_1b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/4440b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_1a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_10a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_1b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0_7c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/Volume0d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/4440d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/A0_0d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_8a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0_8c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_1d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_0a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_7a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/4440_0a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/4440_0b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/220a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_0b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_6a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/Volume0_11c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0_4c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/4440_1a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/220_5a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/220b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/220_4a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/4440_1b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_0d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/FILE0d.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_4a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_2a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/220_1b.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/10_3a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/Volume0_6c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/4440_2a.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/Volume0_7c.jpg
/kaggle/input/dlmia-hw05-new/aortic_atherosclerosis_calcification/4440_3b.jpg
/kaggle/input/dlmia-hw05-new/normal/220_93.jpg
/kaggle/input/dlmia-hw05-new/normal/220_46.jpg
/kaggle/input/dlmia-hw05-new/normal/220_50.jpg
/kaggle/input/dlmia-hw05-new/normal/220_37.jpg
/kaggle/input/dlmia-hw05-new/normal/220_45.jpg
/kaggle/input/dlmia-hw05-new/normal/220_22.jpg
/kaggle/input/dlmia-hw05-new/normal/220_52.jpg
/kaggle/input/dlmia-hw05-new/normal/220_63.jpg
/kaggle/input/dlmia-hw05-new/normal/220_67.jpg
/kaggle/input/dlmia-hw05-new/normal/220_77.jpg
/kaggle/input/dlmia-hw05-new/normal/220_38.jpg
/kaggle/input/dlmia-hw05-new/normal/220_91.jpg
/kaggle/input/dlmia-hw05-new/normal/220_23.jpg
/kaggle/input/dlmia-hw05-new/normal/220_28.jpg
/kaggle/input/dlmia-hw05-new/normal/220_72.jpg
/kaggle/input/dlmia-hw05-new/normal/220_64.jpg
/kaggle/input/dlmia-hw05-new/normal/220_83.jpg
/kaggle/input/dlmia-hw05-new/normal/220_98.jpg
/kaggle/input/dlmia-hw05-new/normal/220_2.jpg
/kaggle/input/dlmia-hw05-new/normal/220_8.jpg
/kaggle/input/dlmia-hw05-new/normal/220_10.jpg
/kaggle/input/dlmia-hw05-new/normal/220_30.jpg
/kaggle/input/dlmia-hw05-new/normal/220_89.jpg
/kaggle/input/dlmia-hw05-new/normal/220_51.jpg
/kaggle/input/dlmia-hw05-new/normal/220_58.jpg
/kaggle/input/dlmia-hw05-new/normal/220_31.jpg
/kaggle/input/dlmia-hw05-new/normal/220_79.jpg
/kaggle/input/dlmia-hw05-new/normal/220_13.jpg
/kaggle/input/dlmia-hw05-new/normal/220_53.jpg
/kaggle/input/dlmia-hw05-new/normal/220_29.jpg
/kaggle/input/dlmia-hw05-new/normal/220_84.jpg
/kaggle/input/dlmia-hw05-new/normal/220_1.jpg
/kaggle/input/dlmia-hw05-new/normal/220_19.jpg
/kaggle/input/dlmia-hw05-new/normal/220_33.jpg
/kaggle/input/dlmia-hw05-new/normal/220_57.jpg
/kaggle/input/dlmia-hw05-new/normal/220_82.jpg
/kaggle/input/dlmia-hw05-new/normal/220_17.jpg
/kaggle/input/dlmia-hw05-new/normal/220_11.jpg
/kaggle/input/dlmia-hw05-new/normal/220_66.jpg
/kaggle/input/dlmia-hw05-new/normal/220_49.jpg
/kaggle/input/dlmia-hw05-new/normal/220_54.jpg
/kaggle/input/dlmia-hw05-new/normal/220_7.jpg
/kaggle/input/dlmia-hw05-new/normal/220_6.jpg
/kaggle/input/dlmia-hw05-new/normal/220_88.jpg
/kaggle/input/dlmia-hw05-new/normal/220_74.jpg
/kaggle/input/dlmia-hw05-new/normal/220_39.jpg
/kaggle/input/dlmia-hw05-new/normal/220_15.jpg
/kaggle/input/dlmia-hw05-new/normal/220_60.jpg
/kaggle/input/dlmia-hw05-new/normal/220.jpg
/kaggle/input/dlmia-hw05-new/normal/220_20.jpg
/kaggle/input/dlmia-hw05-new/normal/220_16.jpg
/kaggle/input/dlmia-hw05-new/normal/220_3.jpg
/kaggle/input/dlmia-hw05-new/normal/220_75.jpg
/kaggle/input/dlmia-hw05-new/normal/220_70.jpg
/kaggle/input/dlmia-hw05-new/normal/220_32.jpg
/kaggle/input/dlmia-hw05-new/normal/220_86.jpg
/kaggle/input/dlmia-hw05-new/normal/220_90.jpg
/kaggle/input/dlmia-hw05-new/normal/220_94.jpg
/kaggle/input/dlmia-hw05-new/normal/220_43.jpg
/kaggle/input/dlmia-hw05-new/normal/220_18.jpg
/kaggle/input/dlmia-hw05-new/normal/220_87.jpg
/kaggle/input/dlmia-hw05-new/normal/220_35.jpg
/kaggle/input/dlmia-hw05-new/normal/220_85.jpg
/kaggle/input/dlmia-hw05-new/normal/220_55.jpg
/kaggle/input/dlmia-hw05-new/normal/220_42.jpg
/kaggle/input/dlmia-hw05-new/normal/220_25.jpg
/kaggle/input/dlmia-hw05-new/normal/220_80.jpg
/kaggle/input/dlmia-hw05-new/normal/220_21.jpg
/kaggle/input/dlmia-hw05-new/normal/220_73.jpg
/kaggle/input/dlmia-hw05-new/normal/220_44.jpg
/kaggle/input/dlmia-hw05-new/normal/220_59.jpg
/kaggle/input/dlmia-hw05-new/normal/220_92.jpg
/kaggle/input/dlmia-hw05-new/normal/220_47.jpg
/kaggle/input/dlmia-hw05-new/normal/220_69.jpg
/kaggle/input/dlmia-hw05-new/normal/220_78.jpg
/kaggle/input/dlmia-hw05-new/normal/220_40.jpg
/kaggle/input/dlmia-hw05-new/normal/220_56.jpg
/kaggle/input/dlmia-hw05-new/normal/220_36.jpg
/kaggle/input/dlmia-hw05-new/normal/220_97.jpg
/kaggle/input/dlmia-hw05-new/normal/220_81.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/A0_0.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_12.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_6 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_2 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_5 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_1 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_11 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_8.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/Volume0.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_9.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_2.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_1 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_2 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_4 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_8.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/A0_5.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/FILE0_0.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_10.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_7.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/4440_3.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_1.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/A0_6.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/4440_2.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_11.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_1.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_0 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/A0.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/A0_4.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/4440_0.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_12.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/FILE0.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/Volume0_0.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_5 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_11.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_7.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_13.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_10.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_7 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_3 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_6.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_12 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_0.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_14.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/4440.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_7 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_15.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_6 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_4 (2).jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_3.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_4.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/A0_2.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/4440_1.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_5.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_3.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/4440_4.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/10_0.jpg
/kaggle/input/dlmia-hw05-new/degenerative_joint_disease_of_the_thoracic_spine/220_0 (2).jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_0.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/4440_7.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_22.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_15.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_18.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/220_1 (2).jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_25.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_8.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/220 (2).jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_16.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/220_2.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_18.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_5.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_2.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_14.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_16.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/220_8.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_5.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_7.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_28.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/4440_3.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_20.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_4.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_6.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/4440_2.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_17.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_4.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_26.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/4440_0.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_11.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_29.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_12.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_10.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_6.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/220_7.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_13.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_8.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_14.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/4440.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/220.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_23.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_19.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_17.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10 (2).jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_7.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_21.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_2.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/4440_5.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/4440_1.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/220_5.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_3.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/4440_4.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/10_0.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_24.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/A0_15.jpg
/kaggle/input/dlmia-hw05-new/scoliosis/220_0 (2).jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/A0_0.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_8.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/Volume0.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/220 (2).jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/Volume0_2.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_5.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_2.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_1 (2).jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/FILE0_0.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/A0_3.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_7.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_9.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_1.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_4.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_0 (2).jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/A0_4.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_12.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/FILE0.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/FILE0_5.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/Volume0_0.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_6.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_13.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/FILE0_1.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_3 (2).jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/4440.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/220.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/FILE0_2.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/FILE0_6.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10 (2).jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/A0_2.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/10_0.jpg
/kaggle/input/dlmia-hw05-new/cardiac_hypertrophy/Volume0_1.jpg
In [2]:
import os
os.environ['CUBLAS_WORKSPACE_CONFIG'] = ':4096:8'
import random
import numpy as np
import pandas as pd
import math
from tqdm.notebook import tqdm

# visualization
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib.patches as patches

# PyTorch
import torch
import torchvision
from torch.utils.data import Dataset, DataLoader
from torchvision import models
from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
from torchvision.models.detection.rpn import AnchorGenerator
from torchvision.models.detection import FasterRCNN
from torchvision.transforms import v2
from torchvision import tv_tensors
from torchvision.tv_tensors import BoundingBoxes

# object detection
!pip install pycocotools
import pycocotools
from pycocotools.coco import COCO
Requirement already satisfied: pycocotools in /usr/local/lib/python3.10/dist-packages (2.0.8)
Requirement already satisfied: matplotlib>=2.1.0 in /usr/local/lib/python3.10/dist-packages (from pycocotools) (3.7.1)
Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from pycocotools) (1.26.4)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.1.0->pycocotools) (1.3.0)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.1.0->pycocotools) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.1.0->pycocotools) (4.53.1)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.1.0->pycocotools) (1.4.7)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.1.0->pycocotools) (24.1)
Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.1.0->pycocotools) (10.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.1.0->pycocotools) (3.1.4)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.1.0->pycocotools) (2.8.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib>=2.1.0->pycocotools) (1.16.0)
In [3]:
!wget https://raw.githubusercontent.com/pytorch/vision/main/references/detection/engine.py
!wget https://raw.githubusercontent.com/pytorch/vision/main/references/detection/utils.py
!wget https://raw.githubusercontent.com/pytorch/vision/main/references/detection/coco_utils.py
!wget https://raw.githubusercontent.com/pytorch/vision/main/references/detection/coco_eval.py
!wget https://raw.githubusercontent.com/pytorch/vision/main/references/detection/transforms.py
    
from engine import evaluate
--2024-12-25 07:46:23--  https://raw.githubusercontent.com/pytorch/vision/main/references/detection/engine.py
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.111.133, 185.199.108.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4063 (4.0K) [text/plain]
Saving to: ‘engine.py’

engine.py           100%[===================>]   3.97K  --.-KB/s    in 0s      

2024-12-25 07:46:23 (57.2 MB/s) - ‘engine.py’ saved [4063/4063]

--2024-12-25 07:46:24--  https://raw.githubusercontent.com/pytorch/vision/main/references/detection/utils.py
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.109.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8388 (8.2K) [text/plain]
Saving to: ‘utils.py’

utils.py            100%[===================>]   8.19K  --.-KB/s    in 0s      

2024-12-25 07:46:24 (53.1 MB/s) - ‘utils.py’ saved [8388/8388]

--2024-12-25 07:46:24--  https://raw.githubusercontent.com/pytorch/vision/main/references/detection/coco_utils.py
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.109.133, 185.199.108.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8397 (8.2K) [text/plain]
Saving to: ‘coco_utils.py’

coco_utils.py       100%[===================>]   8.20K  --.-KB/s    in 0s      

2024-12-25 07:46:25 (54.0 MB/s) - ‘coco_utils.py’ saved [8397/8397]

--2024-12-25 07:46:25--  https://raw.githubusercontent.com/pytorch/vision/main/references/detection/coco_eval.py
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.111.133, 185.199.109.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6447 (6.3K) [text/plain]
Saving to: ‘coco_eval.py’

coco_eval.py        100%[===================>]   6.30K  --.-KB/s    in 0s      

2024-12-25 07:46:25 (77.3 MB/s) - ‘coco_eval.py’ saved [6447/6447]

--2024-12-25 07:46:25--  https://raw.githubusercontent.com/pytorch/vision/main/references/detection/transforms.py
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.108.133, 185.199.110.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 23628 (23K) [text/plain]
Saving to: ‘transforms.py’

transforms.py       100%[===================>]  23.07K  --.-KB/s    in 0.008s  

2024-12-25 07:46:26 (2.88 MB/s) - ‘transforms.py’ saved [23628/23628]

In [11]:
## TODO: Prepare your own information
class config:
    
    ## roots for training & valid
    root = "/kaggle/input/dlmia-hw05-new"
    info_root = "/kaggle/input/dlmia-hw05-new"
    save_root = "/kaggle/working/"

    ## for test images
    test_root = '/kaggle/input/dlmia-hw05-test'
    info_root_test = '/kaggle/input/dlmia-hw05-test'
    
    num_classes = 8 #(for fasterrcnn: background + # of classes): 1+7=8
    
    
    batch_size = 4        
    epochs = 18           
    weight_decay = 1e-4   
    lr = 3e-3             
    momentum = 0.9        
    seed = 42             
    workers = 4           
    
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
In [5]:
def seed_everything(seed):
   
    random.seed(seed) # Set Python random seed    
    np.random.seed(seed) # Set NumPy random seed    
    torch.manual_seed(seed) # Set PyTorch random seed for CPU and GPU
    if torch.cuda.is_available():
        torch.cuda.manual_seed(seed)
        torch.cuda.manual_seed_all(seed)
    
    # Set PyTorch deterministic operations for cudnn backend
    torch.backends.cudnn.deterministic = True
    torch.backends.cudnn.benchmark = False

    
seed_everything(config.seed)
In [6]:
annfile = config.info_root + "/train.json"
coco = COCO(annfile)
coco.cats
loading annotations into memory...
Done (t=0.02s)
creating index...
index created!
Out[6]:
{1: {'id': 1, 'name': 'aortic_curvature'},
 2: {'id': 2, 'name': 'aortic_atherosclerosis_calcification'},
 3: {'id': 3, 'name': 'cardiac_hypertrophy'},
 4: {'id': 4, 'name': 'intercostal_pleural_thickening'},
 5: {'id': 5, 'name': 'lung_field_infiltration'},
 6: {'id': 6, 'name': 'degenerative_joint_disease_of_the_thoracic_spine'},
 7: {'id': 7, 'name': 'scoliosis'}}
In [7]:
coco.loadImgs(0)
Out[7]:
[{'file_name': 'normal/220_94.jpg', 'height': 2560, 'width': 2472, 'id': 0}]
In [8]:
ann_ids = coco.getAnnIds(imgIds = 0)
coco.loadAnns(ann_ids)
Out[8]:
[]
In [9]:
ann_ids = coco.getAnnIds(imgIds = 155)
coco.loadAnns(ann_ids)
Out[9]:
[{'id': 163,
  'image_id': 155,
  'category_id': 3,
  'bbox': [816, 936, 1048, 896],
  'area': 939008,
  'iscrowd': 0,
  'segmentation': [[816, 936, 1864, 936, 1864, 1832, 816, 1832]]},
 {'id': 164,
  'image_id': 155,
  'category_id': 5,
  'bbox': [144, 336, 2008, 1941],
  'area': 3897528,
  'iscrowd': 0,
  'segmentation': [[144, 336, 2152, 336, 2152, 2277, 144, 2277]]}]
In [10]:
del coco
In [15]:
import torch
from torchvision.transforms import v2
from torchvision import tv_tensors

class medTransform:
    def __init__(self, train=False):
        if train:
            
            self.transforms = v2.Compose(
                [
                    v2.ToImage(),                  
                    v2.RandomRotation(degrees=5),  
                    v2.ColorJitter(
                        brightness=0.2,            
                        contrast=0.2,              
                        saturation=0.0,            
                        hue=0.0
                    ),
                    v2.ToDtype(torch.float32, scale=True),  
                ]
            )
        else:
            self.transforms = v2.Compose(
                [
                    v2.ToImage(),
                    v2.ToDtype(torch.float32, scale=True),
                ]
            )

    def __call__(self, x, bboxes):
        
        if isinstance(x, torch.Tensor):
            
            height, width = x.shape[-2], x.shape[-1]
        else:
            
            width, height = x.size

        
        bboxes = tv_tensors.BoundingBoxes(
            bboxes,
            format="XYWH",
            canvas_size=(height, width)
        )
        
        return self.transforms(x, bboxes)
In [13]:
class MedDataset(Dataset):
    
    def __init__(self, root, info_root, split, transforms = None):
        self.split = split
        self.root = root
        self.info_root = info_root
        self.transforms = transforms
        self.coco = COCO(os.path.join(self.info_root, f"{self.split}.json"))
        self.ids = list(sorted(self.coco.imgs.keys()))
    
    def get_image(self, img_id: int):
        image_path = os.path.join(self.root,self.coco.loadImgs(img_id)[0]['file_name'])
        image = Image.open(image_path).convert("RGB")
        return image

    def get_annotation(self, img_id: int):        
        return self.coco.loadAnns(self.coco.getAnnIds(img_id))
          
    def __getitem__(self, index):
        normal = False
        img_id = self.ids[index]
        image = self.get_image(img_id) 
        annotation = self.get_annotation(img_id)
        
        bboxes = [a['bbox']  for a in annotation]
        category_ids = [a['category_id']  for a in annotation]
        if bboxes == []:
            normal = True     
            
        if self.transforms:
            image, bboxes = self.transforms(image, bboxes)     
            
        def reformat_bboxes(boxes):
            return [[val[0], val[1], val[0] + val[2], val[1] + val[3]] for val in boxes]
        
        if normal != True:
            ## Recall that the original format is COCO
            bboxes = reformat_bboxes(bboxes)   

        def create_target(bboxes, normal):
            if normal:
                return {
                    'boxes': torch.zeros((0, 4), dtype=torch.float32),  # Empty boxes
                    'labels': torch.tensor(category_ids, dtype=torch.int64),
                    'image_id': img_id,
                    'area': torch.zeros((0,), dtype=torch.float32),  # Empty areas
                    'iscrowd': torch.zeros((0,), dtype=torch.int64),  # Empty tensor for iscrowd
                }
            else:
            
                return {
                    'boxes': torch.tensor(bboxes),
                    'labels': torch.tensor(category_ids, dtype=torch.int64),
                    'image_id': img_id,
                    'area': torch.tensor([(bbox[2] - bbox[0]) * (bbox[3] - bbox[1]) for bbox in bboxes], dtype=torch.float32),
                    'iscrowd': torch.tensor([a['iscrowd'] for a in annotation], dtype=torch.int64)
                }
       
        targets = create_target(bboxes,normal)
        return image, targets
        
    def __len__(self):
        return len(self.ids)
In [14]:
def collate_fn(batch: list[torch.tensor, dict]):
    return tuple(zip(*batch))
In [16]:
def plot_image_with_boxes(image_tensor, boxes_dict):
    image_np = image_tensor.permute(1, 2, 0).numpy()
    fig, ax = plt.subplots(1)
    # Display the image
    ax.imshow(image_np)
    for box in boxes_dict['boxes']:
        # Extract coordinates (x0, y0, x1, y1)
        x0, y0, x1, y1 = box
        # Calculate the height as (y0 - y1) since y0 is the top and y1 is the bottom
        height = y1 - y0
        # Create a rectangle patch with (x0, y0) as the top-left corner
        rect = patches.Rectangle((x0, y0), x1 - x0, height, linewidth=2, edgecolor='r', facecolor='none')
        ax.add_patch(rect)
    plt.show()
In [17]:
train_dataset = MedDataset(root = config.root, info_root = config.info_root, split = "train", transforms = medTransform(train=True))
train_loader = DataLoader(train_dataset, batch_size = config.batch_size, shuffle = True,num_workers=4, collate_fn = collate_fn)
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
In [20]:
a,b = train_dataset.__getitem__(1)
plot_image_with_boxes(a,b)
No description has been provided for this image
In [19]:
a,b = train_dataset.__getitem__(155)
print(b)
plot_image_with_boxes(a,b)
{'boxes': tensor([[ 790,  922, 1875, 1861],
        [ 100,  294, 2188, 2318]]), 'labels': tensor([3, 5]), 'image_id': 155, 'area': tensor([1018815., 4226112.]), 'iscrowd': tensor([0, 0])}
No description has been provided for this image
In [21]:
def fasterrcnn(num_classes):
    model = models.detection.fasterrcnn_resnet50_fpn(weights='COCO_V1') 
    in_features = model.roi_heads.box_predictor.cls_score.in_features
    model.roi_heads.box_predictor = None
    model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)
    
    return model
In [22]:
model = fasterrcnn(config.num_classes)
Downloading: "https://download.pytorch.org/models/fasterrcnn_resnet50_fpn_coco-258fb6c6.pth" to /root/.cache/torch/hub/checkpoints/fasterrcnn_resnet50_fpn_coco-258fb6c6.pth
100%|██████████| 160M/160M [00:00<00:00, 192MB/s] 
In [23]:
def train_one_epoch(model, train_loader, optimizer, epoch, device):
    model.train()
    
    train_loss = []
    train_loss_dict = []
    
    lr_scheduler = None

    for images, targets in tqdm(train_loader):
        images = [image.to(device) for image in images]
        targets = [{k: (torch.tensor(v,device=device) if not isinstance(v, torch.Tensor) else v.to(device)) for k, v in t.items()} for t in targets]

        loss_dict = model(images, targets)
        losses = sum(loss for loss in loss_dict.values())

        batch_loss_value = losses.item()
        batch_loss_dict = {k: v.item() for k, v in loss_dict.items()}

        train_loss.append(batch_loss_value)
        train_loss_dict.append(batch_loss_dict)
      
        optimizer.zero_grad()
        losses.backward()
        optimizer.step()
    
        if lr_scheduler is not None:
            lr_scheduler.step()
        
    train_loss = np.mean(train_loss)    
    train_loss_dict = pd.DataFrame(train_loss_dict).mean()
    train_loss_classifier = train_loss_dict.loss_classifier
    train_loss_box_reg = train_loss_dict.loss_box_reg
    train_loss_rpn_box_reg = train_loss_dict.loss_rpn_box_reg
    train_loss_objectness = train_loss_dict.loss_objectness

    return train_loss, train_loss_classifier, train_loss_box_reg, train_loss_rpn_box_reg, train_loss_objectness
In [24]:
def validation(model, val_loader, device):
    model.train()
    #model.eval()
    for m in model.modules():
        if isinstance(m, torchvision.ops.Conv2dNormActivation):
            m.eval()
        if isinstance(m, torchvision.ops.FrozenBatchNorm2d):
            m.eval()
        if isinstance(m, torch.nn.BatchNorm2d):
            m.eval()
    val_loss = []
    val_loss_dict = []
    with torch.no_grad():
        for images, targets in tqdm(val_loader):
            images = [image.to(device) for image in images]
            targets = [{k: (torch.tensor(v,device=device) if not isinstance(v, torch.Tensor) else v.to(device)) for k, v in t.items()} for t in targets]

            loss = model(images, targets)
            total_loss = sum(l for l in loss.values())
            
            loss_value = total_loss.item()
            loss_dict = {k: v.item() for k, v in loss.items()}
            
            val_loss.append(loss_value)
            val_loss_dict.append(loss_dict)
    
    val_loss = np.mean(val_loss)
    
    val_loss_dict = pd.DataFrame(val_loss_dict).mean()
    val_loss_classifier = val_loss_dict.loss_classifier
    val_loss_box_reg = val_loss_dict.loss_box_reg
    val_loss_rpn_box_reg = val_loss_dict.loss_rpn_box_reg
    val_loss_objectness = val_loss_dict.loss_objectness
    
    return val_loss, val_loss_classifier, val_loss_box_reg, val_loss_rpn_box_reg, val_loss_objectness
In [25]:
del model
del train_dataset, train_loader
In [26]:
def seed_worker(worker_id):
    worker_seed = torch.initial_seed() % 2**32
    np.random.seed(worker_seed)
    random.seed(worker_seed)
In [27]:
def main():
    
    seed_everything(config.seed)    
    g = torch.Generator()
    g.manual_seed(config.seed)
    
    train_dataset = MedDataset(root = config.root, info_root = config.info_root, split = "train", transforms = medTransform(train=True))
    val_dataset = MedDataset(root = config.root, info_root = config.info_root, split = "val",  transforms = medTransform(train=False))

    train_loader = DataLoader(train_dataset, batch_size = config.batch_size, shuffle = True,
                              num_workers=config.workers, collate_fn = collate_fn,pin_memory=True
                             )
    val_loader = DataLoader(val_dataset, batch_size = config.batch_size, shuffle = False,
                            num_workers=config.workers, worker_init_fn=seed_worker,
                            generator=g, collate_fn = collate_fn,pin_memory=True
                           )

    
    device = config.device
    model =  fasterrcnn(num_classes = config.num_classes)
    model.to(device)
    
    parameters = [p for p in model.parameters() if p.requires_grad]

    optimizer = torch.optim.SGD(parameters, lr = config.lr, momentum = config.momentum, nesterov = True, weight_decay = config.weight_decay)
    best_val_loss = float("inf")
    best_map50 = 0.0
    history = {
        "train": {
            "loss": [],
            "loss_classifier": [],
            "loss_box_reg": [],
            "loss_rpn_box_reg": [],
            "loss_objectness": []
        },
        "val": {
            "loss": [],
            "loss_classifier": [],
            "loss_box_reg": [],
            "loss_rpn_box_reg": [],
            "loss_objectness": []
        },
        "map50":{
            "train":[],
            "valid":[],
        }
    }
    best_idx = 0
    print('start')
    for epoch in range(config.epochs):
        print()
        train_loss, train_loss_classifier, train_loss_box_reg, train_loss_rpn_box_reg, train_loss_objectness = train_one_epoch(
            model, train_loader, optimizer, epoch, device,
        )
        
        val_loss, val_loss_classifier, val_loss_box_reg, val_loss_rpn_box_reg, val_loss_objectness = validation(
            model, val_loader, device
        )

        ## Training
        history["train"]["loss"].append(train_loss)
        history["train"]["loss_classifier"].append(train_loss_classifier)
        history["train"]["loss_box_reg"].append(train_loss_box_reg)
        history["train"]["loss_rpn_box_reg"].append(train_loss_rpn_box_reg)
        history["train"]["loss_objectness"].append(train_loss_objectness)
        ## Validation
        history["val"]["loss"].append(val_loss)
        history["val"]["loss_classifier"].append(val_loss_classifier)
        history["val"]["loss_box_reg"].append(val_loss_box_reg)
        history["val"]["loss_rpn_box_reg"].append(val_loss_rpn_box_reg)
        history["val"]["loss_objectness"].append(val_loss_objectness)

        
        print(f'Epoch: {epoch+1}/{config.epochs} | LR: {optimizer.state_dict()["param_groups"][0]["lr"]:.6f}')

        print("*****Training*****")
        print(f'Loss: {train_loss:.4f} | Classifier Loss: {train_loss_classifier:.4f} | Box Reg Loss: {train_loss_box_reg:.4f} | RPN Box Reg Loss: {train_loss_rpn_box_reg:.4f} | Objectness Loss: {train_loss_objectness:.4f}')
        train_evaluator = evaluate(model, train_loader, device = device)
        print("*****Validation*****")
        print(f'Loss: {val_loss:.4f} | Classifier Loss: {val_loss_classifier:.4f} | Box Reg Loss: {val_loss_box_reg:.4f} | RPN Box Reg Loss: {val_loss_rpn_box_reg:.4f} | Objectness Loss: {val_loss_objectness:.4f}')
        valid_evaluator = evaluate(model, val_loader, device = device)
        
        train_map50 = train_evaluator.coco_eval['bbox'].stats[1]
        valid_map50 = valid_evaluator.coco_eval['bbox'].stats[1]
        
        history["map50"]["train"].append(train_map50)   
        history["map50"]["valid"].append(valid_map50)        

        ## TODO save your model

        if valid_map50 > best_map50:
            best_map50 = valid_map50
            save_file = {
                "model": model.state_dict(),
                "optimizer": optimizer.state_dict(),
                "epoch": epoch,
                "args": config
            }
            best_idx=epoch
            
            torch.save(save_file, os.path.join(config.save_root,"final.pth"))
        
    print(f'Best epoch in {best_idx+1}') 


    ## Evaluation result 
    plt.figure(figsize = (12, 5))
    plt.subplot(1, 2, 1)
    plt.plot(range(config.epochs), history["map50"]["train"], label = 'Training map50')
    plt.plot(range(config.epochs), history["map50"]["valid"], label = 'Validation map50')
    plt.xlabel('Epoch')
    plt.ylabel('map')
    plt.legend()
    plt.title('Validation and Testing map50')
    plt.show()
    
    plt.figure(figsize = (12, 5))
    plt.subplot(1, 2, 1)
    plt.plot(range(config.epochs), history["train"]["loss"], label = 'Training Loss')
    plt.plot(range(config.epochs), history["val"]["loss"], label = 'Validation Loss')
    plt.xlabel('Epoch')
    plt.ylabel('Loss')
    plt.legend()
    plt.title('Training and Validation Loss Curves')
    plt.show()
        
    plt.figure(figsize = (12, 5))
    plt.subplot(1, 2, 1)
    plt.plot(range(config.epochs), history["train"]["loss_classifier"], label = 'Training Classifier Loss')
    plt.plot(range(config.epochs), history["val"]["loss_classifier"], label = 'Validation Classifier Loss')
    plt.xlabel('Epoch')
    plt.ylabel('Classifier Loss')
    plt.legend()
    plt.title('Training and Validation Classifier Loss Curves')
    plt.show()
        
    plt.figure(figsize = (12, 5))
    plt.subplot(1, 2, 1)
    plt.plot(range(config.epochs), history["train"]["loss_box_reg"], label = 'Training Box Reg Loss')
    plt.plot(range(config.epochs), history["val"]["loss_box_reg"], label = 'Validation Box Reg Loss')
    plt.xlabel('Epoch')
    plt.ylabel('Box Reg Loss')
    plt.legend()
    plt.title('Training and Validation Box Reg Loss Curves')
    plt.show()
        
    plt.figure(figsize = (12, 5))
    plt.subplot(1, 2, 1)
    plt.plot(range(config.epochs), history["train"]["loss_rpn_box_reg"], label = 'Training RPN Box Reg Loss')
    plt.plot(range(config.epochs), history["val"]["loss_rpn_box_reg"], label = 'Validation RPN Box Reg Loss')
    
    plt.xlabel('Epoch')
    plt.ylabel('RPN Box Reg Loss')
    plt.legend()
    plt.title('Training and Validation RPN Box Reg Loss Curves')
    plt.show()
        
    plt.figure(figsize = (12, 5))
    plt.subplot(1, 2, 1)
    plt.plot(range(config.epochs), history["train"]["loss_objectness"], label = 'Training Objectness Loss')
    plt.plot(range(config.epochs), history["val"]["loss_objectness"], label = 'Validation Objectness Loss')

    plt.xlabel('Epoch')
    plt.ylabel('Objectness Loss')
    plt.legend()
    plt.title('Training and Validation Objectness Loss Curves')
    plt.show()
In [28]:
if __name__ == "__main__":
    main()
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
start

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 1/18 | LR: 0.003000
*****Training*****
Loss: 0.2848 | Classifier Loss: 0.1648 | Box Reg Loss: 0.0993 | RPN Box Reg Loss: 0.0088 | Objectness Loss: 0.0119
creating index...
index created!
Test:  [ 0/70]  eta: 0:08:10  model_time: 0.3441 (0.3441)  evaluator_time: 0.0465 (0.0465)  time: 7.0115  data: 6.5975  max mem: 4823
Test:  [69/70]  eta: 0:00:01  model_time: 0.2344 (0.2408)  evaluator_time: 0.0164 (0.0183)  time: 1.4274  data: 1.1546  max mem: 4823
Test: Total time: 0:01:52 (1.6061 s / it)
Averaged stats: model_time: 0.2344 (0.2408)  evaluator_time: 0.0164 (0.0183)
Accumulating evaluation results...
DONE (t=0.15s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.063
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.163
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.041
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.063
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.216
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.316
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.316
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.316
*****Validation*****
Loss: 0.2100 | Classifier Loss: 0.1023 | Box Reg Loss: 0.0922 | RPN Box Reg Loss: 0.0078 | Objectness Loss: 0.0077
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:56  model_time: 0.2481 (0.2481)  evaluator_time: 0.0170 (0.0170)  time: 3.1584  data: 2.8652  max mem: 4823
Test:  [17/18]  eta: 0:00:00  model_time: 0.2232 (0.2304)  evaluator_time: 0.0090 (0.0166)  time: 0.4592  data: 0.1895  max mem: 4823
Test: Total time: 0:00:08 (0.4627 s / it)
Averaged stats: model_time: 0.2232 (0.2304)  evaluator_time: 0.0090 (0.0166)
Accumulating evaluation results...
DONE (t=0.05s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.047
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.126
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.016
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.048
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.159
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.245
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.247
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.247

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 2/18 | LR: 0.003000
*****Training*****
Loss: 0.2037 | Classifier Loss: 0.0966 | Box Reg Loss: 0.0956 | RPN Box Reg Loss: 0.0065 | Objectness Loss: 0.0050
creating index...
index created!
Test:  [ 0/70]  eta: 0:08:44  model_time: 0.2610 (0.2610)  evaluator_time: 0.0114 (0.0114)  time: 7.4882  data: 7.1921  max mem: 4823
Test:  [69/70]  eta: 0:00:01  model_time: 0.2194 (0.2324)  evaluator_time: 0.0126 (0.0234)  time: 1.3026  data: 1.0434  max mem: 4823
Test: Total time: 0:01:50 (1.5745 s / it)
Averaged stats: model_time: 0.2194 (0.2324)  evaluator_time: 0.0126 (0.0234)
Accumulating evaluation results...
DONE (t=0.14s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.111
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.248
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.074
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.112
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.426
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.467
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.467
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.467
*****Validation*****
Loss: 0.1875 | Classifier Loss: 0.0861 | Box Reg Loss: 0.0839 | RPN Box Reg Loss: 0.0059 | Objectness Loss: 0.0115
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:47  model_time: 0.2332 (0.2332)  evaluator_time: 0.0089 (0.0089)  time: 2.6638  data: 2.3937  max mem: 4823
Test:  [17/18]  eta: 0:00:00  model_time: 0.2211 (0.2230)  evaluator_time: 0.0111 (0.0161)  time: 0.4192  data: 0.1575  max mem: 4823
Test: Total time: 0:00:07 (0.4235 s / it)
Averaged stats: model_time: 0.2211 (0.2230)  evaluator_time: 0.0111 (0.0161)
Accumulating evaluation results...
DONE (t=0.05s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.107
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.249
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.054
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.108
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.339
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.413
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.413
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.413

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 3/18 | LR: 0.003000
*****Training*****
Loss: 0.1790 | Classifier Loss: 0.0856 | Box Reg Loss: 0.0817 | RPN Box Reg Loss: 0.0064 | Objectness Loss: 0.0052
creating index...
index created!
Test:  [ 0/70]  eta: 0:07:27  model_time: 0.3605 (0.3605)  evaluator_time: 0.0294 (0.0294)  time: 6.3919  data: 5.9810  max mem: 4823
Test:  [69/70]  eta: 0:00:01  model_time: 0.2220 (0.2322)  evaluator_time: 0.0141 (0.0181)  time: 1.4244  data: 1.1699  max mem: 4823
Test: Total time: 0:01:51 (1.5920 s / it)
Averaged stats: model_time: 0.2220 (0.2322)  evaluator_time: 0.0141 (0.0181)
Accumulating evaluation results...
DONE (t=0.18s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.144
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.314
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.105
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.144
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.512
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.540
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.540
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.540
*****Validation*****
Loss: 0.1610 | Classifier Loss: 0.0847 | Box Reg Loss: 0.0647 | RPN Box Reg Loss: 0.0053 | Objectness Loss: 0.0062
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:50  model_time: 0.2258 (0.2258)  evaluator_time: 0.0194 (0.0194)  time: 2.8044  data: 2.5273  max mem: 4823
Test:  [17/18]  eta: 0:00:00  model_time: 0.2226 (0.2294)  evaluator_time: 0.0145 (0.0188)  time: 0.4122  data: 0.1410  max mem: 4823
Test: Total time: 0:00:07 (0.4164 s / it)
Averaged stats: model_time: 0.2226 (0.2294)  evaluator_time: 0.0145 (0.0188)
Accumulating evaluation results...
DONE (t=0.05s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.126
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.291
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.100
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.126
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.453
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.489
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.489
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.489

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 4/18 | LR: 0.003000
*****Training*****
Loss: 0.1490 | Classifier Loss: 0.0745 | Box Reg Loss: 0.0649 | RPN Box Reg Loss: 0.0057 | Objectness Loss: 0.0039
creating index...
index created!
Test:  [ 0/70]  eta: 0:08:50  model_time: 0.3188 (0.3188)  evaluator_time: 0.0396 (0.0396)  time: 7.5771  data: 7.1853  max mem: 4823
Test:  [69/70]  eta: 0:00:01  model_time: 0.2202 (0.2303)  evaluator_time: 0.0100 (0.0221)  time: 1.3425  data: 1.0706  max mem: 4823
Test: Total time: 0:01:53 (1.6249 s / it)
Averaged stats: model_time: 0.2202 (0.2303)  evaluator_time: 0.0100 (0.0221)
Accumulating evaluation results...
DONE (t=0.12s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.186
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.366
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.181
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.187
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.554
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.562
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.562
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.562
*****Validation*****
Loss: 0.1387 | Classifier Loss: 0.0683 | Box Reg Loss: 0.0551 | RPN Box Reg Loss: 0.0056 | Objectness Loss: 0.0096
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:54  model_time: 0.3773 (0.3773)  evaluator_time: 0.0235 (0.0235)  time: 3.0525  data: 2.6274  max mem: 4823
Test:  [17/18]  eta: 0:00:00  model_time: 0.2293 (0.2370)  evaluator_time: 0.0119 (0.0147)  time: 0.4201  data: 0.1466  max mem: 4823
Test: Total time: 0:00:07 (0.4242 s / it)
Averaged stats: model_time: 0.2293 (0.2370)  evaluator_time: 0.0119 (0.0147)
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.192
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.368
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.158
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.193
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.477
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.503
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.503
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.503

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 5/18 | LR: 0.003000
*****Training*****
Loss: 0.1485 | Classifier Loss: 0.0740 | Box Reg Loss: 0.0647 | RPN Box Reg Loss: 0.0061 | Objectness Loss: 0.0036
creating index...
index created!
Test:  [ 0/70]  eta: 0:08:56  model_time: 0.2447 (0.2447)  evaluator_time: 0.0190 (0.0190)  time: 7.6711  data: 7.3829  max mem: 4936
Test:  [69/70]  eta: 0:00:01  model_time: 0.2240 (0.2292)  evaluator_time: 0.0107 (0.0152)  time: 1.3438  data: 1.0951  max mem: 4936
Test: Total time: 0:01:48 (1.5517 s / it)
Averaged stats: model_time: 0.2240 (0.2292)  evaluator_time: 0.0107 (0.0152)
Accumulating evaluation results...
DONE (t=0.13s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.200
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.385
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.179
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.201
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.572
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.581
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.581
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.581
*****Validation*****
Loss: 0.1435 | Classifier Loss: 0.0734 | Box Reg Loss: 0.0581 | RPN Box Reg Loss: 0.0053 | Objectness Loss: 0.0068
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:49  model_time: 0.2252 (0.2252)  evaluator_time: 0.0234 (0.0234)  time: 2.7592  data: 2.4828  max mem: 4936
Test:  [17/18]  eta: 0:00:00  model_time: 0.2241 (0.2372)  evaluator_time: 0.0125 (0.0178)  time: 0.4359  data: 0.1574  max mem: 4936
Test: Total time: 0:00:07 (0.4404 s / it)
Averaged stats: model_time: 0.2241 (0.2372)  evaluator_time: 0.0125 (0.0178)
Accumulating evaluation results...
DONE (t=0.05s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.199
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.365
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.224
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.199
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.526
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.533
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.533
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.533

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 6/18 | LR: 0.003000
*****Training*****
Loss: 0.1384 | Classifier Loss: 0.0688 | Box Reg Loss: 0.0615 | RPN Box Reg Loss: 0.0052 | Objectness Loss: 0.0029
creating index...
index created!
Test:  [ 0/70]  eta: 0:09:22  model_time: 0.2947 (0.2947)  evaluator_time: 0.0179 (0.0179)  time: 8.0387  data: 7.7028  max mem: 4936
Test:  [69/70]  eta: 0:00:01  model_time: 0.2244 (0.2326)  evaluator_time: 0.0116 (0.0145)  time: 1.2743  data: 1.0111  max mem: 4936
Test: Total time: 0:01:50 (1.5842 s / it)
Averaged stats: model_time: 0.2244 (0.2326)  evaluator_time: 0.0116 (0.0145)
Accumulating evaluation results...
DONE (t=0.12s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.224
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.411
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.233
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.224
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.600
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.619
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.619
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.619
*****Validation*****
Loss: 0.1372 | Classifier Loss: 0.0715 | Box Reg Loss: 0.0561 | RPN Box Reg Loss: 0.0048 | Objectness Loss: 0.0047
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:52  model_time: 0.2294 (0.2294)  evaluator_time: 0.0113 (0.0113)  time: 2.9106  data: 2.6455  max mem: 4936
Test:  [17/18]  eta: 0:00:00  model_time: 0.2242 (0.2300)  evaluator_time: 0.0130 (0.0168)  time: 0.4176  data: 0.1477  max mem: 4936
Test: Total time: 0:00:07 (0.4219 s / it)
Averaged stats: model_time: 0.2242 (0.2300)  evaluator_time: 0.0130 (0.0168)
Accumulating evaluation results...
DONE (t=0.05s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.219
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.369
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.234
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.219
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.554
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.561
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.561
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.561

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 7/18 | LR: 0.003000
*****Training*****
Loss: 0.1338 | Classifier Loss: 0.0679 | Box Reg Loss: 0.0576 | RPN Box Reg Loss: 0.0049 | Objectness Loss: 0.0034
creating index...
index created!
Test:  [ 0/70]  eta: 0:08:32  model_time: 0.3198 (0.3198)  evaluator_time: 0.0297 (0.0297)  time: 7.3275  data: 6.9516  max mem: 4936
Test:  [69/70]  eta: 0:00:01  model_time: 0.2241 (0.2347)  evaluator_time: 0.0117 (0.0169)  time: 1.2677  data: 1.0134  max mem: 4936
Test: Total time: 0:01:47 (1.5359 s / it)
Averaged stats: model_time: 0.2241 (0.2347)  evaluator_time: 0.0117 (0.0169)
Accumulating evaluation results...
DONE (t=0.12s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.260
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.473
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.261
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.260
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.600
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.614
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.614
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.614
*****Validation*****
Loss: 0.1348 | Classifier Loss: 0.0685 | Box Reg Loss: 0.0553 | RPN Box Reg Loss: 0.0047 | Objectness Loss: 0.0062
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:46  model_time: 0.2793 (0.2793)  evaluator_time: 0.0274 (0.0274)  time: 2.5658  data: 2.2291  max mem: 4936
Test:  [17/18]  eta: 0:00:00  model_time: 0.2359 (0.2369)  evaluator_time: 0.0101 (0.0151)  time: 0.4290  data: 0.1524  max mem: 4936
Test: Total time: 0:00:07 (0.4332 s / it)
Averaged stats: model_time: 0.2359 (0.2369)  evaluator_time: 0.0101 (0.0151)
Accumulating evaluation results...
DONE (t=0.05s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.238
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.446
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.254
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.238
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.514
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.514
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.514
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.514

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 8/18 | LR: 0.003000
*****Training*****
Loss: 0.1262 | Classifier Loss: 0.0644 | Box Reg Loss: 0.0544 | RPN Box Reg Loss: 0.0046 | Objectness Loss: 0.0027
creating index...
index created!
Test:  [ 0/70]  eta: 0:10:06  model_time: 0.2388 (0.2388)  evaluator_time: 0.0178 (0.0178)  time: 8.6694  data: 8.3857  max mem: 4936
Test:  [69/70]  eta: 0:00:01  model_time: 0.2196 (0.2257)  evaluator_time: 0.0102 (0.0132)  time: 1.3967  data: 1.1516  max mem: 4936
Test: Total time: 0:01:56 (1.6668 s / it)
Averaged stats: model_time: 0.2196 (0.2257)  evaluator_time: 0.0102 (0.0132)
Accumulating evaluation results...
DONE (t=0.12s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.279
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.521
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.268
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.279
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.603
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.607
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.607
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.607
*****Validation*****
Loss: 0.1445 | Classifier Loss: 0.0744 | Box Reg Loss: 0.0581 | RPN Box Reg Loss: 0.0048 | Objectness Loss: 0.0072
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:47  model_time: 0.2303 (0.2303)  evaluator_time: 0.0330 (0.0330)  time: 2.6611  data: 2.3671  max mem: 4936
Test:  [17/18]  eta: 0:00:00  model_time: 0.2401 (0.2400)  evaluator_time: 0.0173 (0.0193)  time: 0.4414  data: 0.1586  max mem: 4936
Test: Total time: 0:00:08 (0.4451 s / it)
Averaged stats: model_time: 0.2401 (0.2400)  evaluator_time: 0.0173 (0.0193)
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.225
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.422
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.206
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.225
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.514
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.519
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.519
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.519

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 9/18 | LR: 0.003000
*****Training*****
Loss: 0.1232 | Classifier Loss: 0.0626 | Box Reg Loss: 0.0531 | RPN Box Reg Loss: 0.0045 | Objectness Loss: 0.0031
creating index...
index created!
Test:  [ 0/70]  eta: 0:09:19  model_time: 0.2968 (0.2968)  evaluator_time: 0.0177 (0.0177)  time: 7.9905  data: 7.6444  max mem: 5065
Test:  [69/70]  eta: 0:00:01  model_time: 0.2254 (0.2353)  evaluator_time: 0.0111 (0.0218)  time: 1.4403  data: 1.1546  max mem: 5065
Test: Total time: 0:01:52 (1.6129 s / it)
Averaged stats: model_time: 0.2254 (0.2353)  evaluator_time: 0.0111 (0.0218)
Accumulating evaluation results...
DONE (t=0.11s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.309
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.538
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.314
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.309
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.635
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.641
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.641
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.641
*****Validation*****
Loss: 0.1390 | Classifier Loss: 0.0715 | Box Reg Loss: 0.0575 | RPN Box Reg Loss: 0.0049 | Objectness Loss: 0.0051
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:49  model_time: 0.2230 (0.2230)  evaluator_time: 0.0173 (0.0173)  time: 2.7699  data: 2.5017  max mem: 5065
Test:  [17/18]  eta: 0:00:00  model_time: 0.2230 (0.2338)  evaluator_time: 0.0128 (0.0151)  time: 0.4174  data: 0.1451  max mem: 5065
Test: Total time: 0:00:07 (0.4212 s / it)
Averaged stats: model_time: 0.2230 (0.2338)  evaluator_time: 0.0128 (0.0151)
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.238
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.442
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.231
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.238
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.514
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.514
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.514
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.514

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 10/18 | LR: 0.003000
*****Training*****
Loss: 0.1196 | Classifier Loss: 0.0607 | Box Reg Loss: 0.0515 | RPN Box Reg Loss: 0.0044 | Objectness Loss: 0.0030
creating index...
index created!
Test:  [ 0/70]  eta: 0:08:10  model_time: 0.3063 (0.3063)  evaluator_time: 0.0290 (0.0290)  time: 7.0119  data: 6.6470  max mem: 5065
Test:  [69/70]  eta: 0:00:01  model_time: 0.2193 (0.2348)  evaluator_time: 0.0095 (0.0157)  time: 1.4068  data: 1.1565  max mem: 5065
Test: Total time: 0:01:50 (1.5720 s / it)
Averaged stats: model_time: 0.2193 (0.2348)  evaluator_time: 0.0095 (0.0157)
Accumulating evaluation results...
DONE (t=0.11s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.293
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.545
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.251
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.293
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.616
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.631
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.631
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.631
*****Validation*****
Loss: 0.1370 | Classifier Loss: 0.0714 | Box Reg Loss: 0.0540 | RPN Box Reg Loss: 0.0046 | Objectness Loss: 0.0070
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:51  model_time: 0.2197 (0.2197)  evaluator_time: 0.0197 (0.0197)  time: 2.8888  data: 2.6248  max mem: 5065
Test:  [17/18]  eta: 0:00:00  model_time: 0.2234 (0.2330)  evaluator_time: 0.0116 (0.0153)  time: 0.4202  data: 0.1492  max mem: 5065
Test: Total time: 0:00:07 (0.4244 s / it)
Averaged stats: model_time: 0.2234 (0.2330)  evaluator_time: 0.0116 (0.0153)
Accumulating evaluation results...
DONE (t=0.05s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.238
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.401
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.286
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.238
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.559
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.571
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.571
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.571

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 11/18 | LR: 0.003000
*****Training*****
Loss: 0.1158 | Classifier Loss: 0.0583 | Box Reg Loss: 0.0510 | RPN Box Reg Loss: 0.0042 | Objectness Loss: 0.0023
creating index...
index created!
Test:  [ 0/70]  eta: 0:07:44  model_time: 0.2676 (0.2676)  evaluator_time: 0.0169 (0.0169)  time: 6.6332  data: 6.3263  max mem: 5065
Test:  [69/70]  eta: 0:00:01  model_time: 0.2207 (0.2330)  evaluator_time: 0.0108 (0.0161)  time: 1.1881  data: 0.9320  max mem: 5065
Test: Total time: 0:01:49 (1.5686 s / it)
Averaged stats: model_time: 0.2207 (0.2330)  evaluator_time: 0.0108 (0.0161)
Accumulating evaluation results...
DONE (t=0.11s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.331
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.581
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.349
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.331
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.623
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.628
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.628
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.628
*****Validation*****
Loss: 0.1417 | Classifier Loss: 0.0723 | Box Reg Loss: 0.0583 | RPN Box Reg Loss: 0.0049 | Objectness Loss: 0.0063
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:51  model_time: 0.2257 (0.2257)  evaluator_time: 0.0091 (0.0091)  time: 2.8511  data: 2.5918  max mem: 5065
Test:  [17/18]  eta: 0:00:00  model_time: 0.2295 (0.2433)  evaluator_time: 0.0091 (0.0177)  time: 0.4564  data: 0.1723  max mem: 5065
Test: Total time: 0:00:08 (0.4604 s / it)
Averaged stats: model_time: 0.2295 (0.2433)  evaluator_time: 0.0091 (0.0177)
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.191
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.395
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.162
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.192
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.502
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.505
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.505
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.505

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 12/18 | LR: 0.003000
*****Training*****
Loss: 0.1126 | Classifier Loss: 0.0563 | Box Reg Loss: 0.0502 | RPN Box Reg Loss: 0.0041 | Objectness Loss: 0.0020
creating index...
index created!
Test:  [ 0/70]  eta: 0:08:36  model_time: 0.2943 (0.2943)  evaluator_time: 0.0197 (0.0197)  time: 7.3830  data: 7.0410  max mem: 5065
Test:  [69/70]  eta: 0:00:01  model_time: 0.2236 (0.2348)  evaluator_time: 0.0100 (0.0217)  time: 1.2831  data: 1.0238  max mem: 5065
Test: Total time: 0:01:49 (1.5628 s / it)
Averaged stats: model_time: 0.2236 (0.2348)  evaluator_time: 0.0100 (0.0217)
Accumulating evaluation results...
DONE (t=0.11s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.379
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.634
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.401
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.379
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.659
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.659
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.659
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.659
*****Validation*****
Loss: 0.1406 | Classifier Loss: 0.0719 | Box Reg Loss: 0.0561 | RPN Box Reg Loss: 0.0050 | Objectness Loss: 0.0077
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:45  model_time: 0.2824 (0.2824)  evaluator_time: 0.0297 (0.0297)  time: 2.5428  data: 2.2054  max mem: 5065
Test:  [17/18]  eta: 0:00:00  model_time: 0.2353 (0.2308)  evaluator_time: 0.0111 (0.0131)  time: 0.4124  data: 0.1455  max mem: 5065
Test: Total time: 0:00:07 (0.4168 s / it)
Averaged stats: model_time: 0.2353 (0.2308)  evaluator_time: 0.0111 (0.0131)
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.263
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.482
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.243
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.264
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.526
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.530
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.530
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.530

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 13/18 | LR: 0.003000
*****Training*****
Loss: 0.1098 | Classifier Loss: 0.0551 | Box Reg Loss: 0.0485 | RPN Box Reg Loss: 0.0040 | Objectness Loss: 0.0022
creating index...
index created!
Test:  [ 0/70]  eta: 0:08:42  model_time: 0.2748 (0.2748)  evaluator_time: 0.0175 (0.0175)  time: 7.4711  data: 7.1471  max mem: 5065
Test:  [69/70]  eta: 0:00:01  model_time: 0.2248 (0.2341)  evaluator_time: 0.0114 (0.0152)  time: 1.2850  data: 1.0291  max mem: 5065
Test: Total time: 0:01:42 (1.4639 s / it)
Averaged stats: model_time: 0.2248 (0.2341)  evaluator_time: 0.0114 (0.0152)
Accumulating evaluation results...
DONE (t=0.11s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.365
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.647
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.354
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.365
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.634
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.637
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.637
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.637
*****Validation*****
Loss: 0.1425 | Classifier Loss: 0.0691 | Box Reg Loss: 0.0613 | RPN Box Reg Loss: 0.0047 | Objectness Loss: 0.0074
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:51  model_time: 0.2395 (0.2395)  evaluator_time: 0.0175 (0.0175)  time: 2.8640  data: 2.5824  max mem: 5065
Test:  [17/18]  eta: 0:00:00  model_time: 0.2298 (0.2427)  evaluator_time: 0.0109 (0.0166)  time: 0.4495  data: 0.1662  max mem: 5065
Test: Total time: 0:00:08 (0.4537 s / it)
Averaged stats: model_time: 0.2298 (0.2427)  evaluator_time: 0.0109 (0.0166)
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.241
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.468
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.224
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.241
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.484
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.496
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.496
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.496

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 14/18 | LR: 0.003000
*****Training*****
Loss: 0.1039 | Classifier Loss: 0.0517 | Box Reg Loss: 0.0466 | RPN Box Reg Loss: 0.0036 | Objectness Loss: 0.0020
creating index...
index created!
Test:  [ 0/70]  eta: 0:07:38  model_time: 0.3803 (0.3803)  evaluator_time: 0.0538 (0.0538)  time: 6.5498  data: 6.0880  max mem: 5065
Test:  [69/70]  eta: 0:00:01  model_time: 0.2246 (0.2317)  evaluator_time: 0.0097 (0.0140)  time: 1.4072  data: 1.1530  max mem: 5065
Test: Total time: 0:01:47 (1.5423 s / it)
Averaged stats: model_time: 0.2246 (0.2317)  evaluator_time: 0.0097 (0.0140)
Accumulating evaluation results...
DONE (t=0.10s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.395
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.659
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.422
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.395
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.667
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.671
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.671
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.671
*****Validation*****
Loss: 0.1453 | Classifier Loss: 0.0747 | Box Reg Loss: 0.0600 | RPN Box Reg Loss: 0.0045 | Objectness Loss: 0.0061
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:51  model_time: 0.2254 (0.2254)  evaluator_time: 0.0196 (0.0196)  time: 2.8886  data: 2.6187  max mem: 5065
Test:  [17/18]  eta: 0:00:00  model_time: 0.2273 (0.2321)  evaluator_time: 0.0092 (0.0134)  time: 0.4218  data: 0.1542  max mem: 5065
Test: Total time: 0:00:07 (0.4259 s / it)
Averaged stats: model_time: 0.2273 (0.2321)  evaluator_time: 0.0092 (0.0134)
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.251
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.455
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.242
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.251
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.495
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.501
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.501
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.501

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 15/18 | LR: 0.003000
*****Training*****
Loss: 0.1007 | Classifier Loss: 0.0502 | Box Reg Loss: 0.0448 | RPN Box Reg Loss: 0.0036 | Objectness Loss: 0.0022
creating index...
index created!
Test:  [ 0/70]  eta: 0:09:40  model_time: 0.2572 (0.2572)  evaluator_time: 0.0415 (0.0415)  time: 8.2914  data: 7.9679  max mem: 5065
Test:  [69/70]  eta: 0:00:01  model_time: 0.2285 (0.2359)  evaluator_time: 0.0120 (0.0153)  time: 1.2588  data: 0.9932  max mem: 5065
Test: Total time: 0:01:46 (1.5258 s / it)
Averaged stats: model_time: 0.2285 (0.2359)  evaluator_time: 0.0120 (0.0153)
Accumulating evaluation results...
DONE (t=0.12s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.415
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.678
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.444
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.415
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.680
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.685
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.685
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.685
*****Validation*****
Loss: 0.1478 | Classifier Loss: 0.0785 | Box Reg Loss: 0.0574 | RPN Box Reg Loss: 0.0047 | Objectness Loss: 0.0072
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:51  model_time: 0.2174 (0.2174)  evaluator_time: 0.0100 (0.0100)  time: 2.8663  data: 2.6142  max mem: 5065
Test:  [17/18]  eta: 0:00:00  model_time: 0.2233 (0.2262)  evaluator_time: 0.0114 (0.0138)  time: 0.4210  data: 0.1587  max mem: 5065
Test: Total time: 0:00:07 (0.4251 s / it)
Averaged stats: model_time: 0.2233 (0.2262)  evaluator_time: 0.0114 (0.0138)
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.232
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.464
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.175
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.233
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.504
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.509
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.509
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.509

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 16/18 | LR: 0.003000
*****Training*****
Loss: 0.0991 | Classifier Loss: 0.0486 | Box Reg Loss: 0.0449 | RPN Box Reg Loss: 0.0034 | Objectness Loss: 0.0022
creating index...
index created!
Test:  [ 0/70]  eta: 0:08:03  model_time: 0.3024 (0.3024)  evaluator_time: 0.0410 (0.0410)  time: 6.9130  data: 6.5433  max mem: 5065
Test:  [69/70]  eta: 0:00:01  model_time: 0.2165 (0.2325)  evaluator_time: 0.0086 (0.0139)  time: 1.3033  data: 1.0574  max mem: 5065
Test: Total time: 0:01:47 (1.5405 s / it)
Averaged stats: model_time: 0.2165 (0.2325)  evaluator_time: 0.0086 (0.0139)
Accumulating evaluation results...
DONE (t=0.10s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.422
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.721
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.444
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.422
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.662
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.663
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.663
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.663
*****Validation*****
Loss: 0.1478 | Classifier Loss: 0.0741 | Box Reg Loss: 0.0609 | RPN Box Reg Loss: 0.0049 | Objectness Loss: 0.0079
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:50  model_time: 0.2346 (0.2346)  evaluator_time: 0.0108 (0.0108)  time: 2.7832  data: 2.5130  max mem: 5065
Test:  [17/18]  eta: 0:00:00  model_time: 0.2311 (0.2309)  evaluator_time: 0.0108 (0.0138)  time: 0.4120  data: 0.1451  max mem: 5065
Test: Total time: 0:00:07 (0.4163 s / it)
Averaged stats: model_time: 0.2311 (0.2309)  evaluator_time: 0.0108 (0.0138)
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.257
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.506
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.218
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.257
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.498
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.499
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.499
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.499

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 17/18 | LR: 0.003000
*****Training*****
Loss: 0.0980 | Classifier Loss: 0.0475 | Box Reg Loss: 0.0452 | RPN Box Reg Loss: 0.0035 | Objectness Loss: 0.0019
creating index...
index created!
Test:  [ 0/70]  eta: 0:09:08  model_time: 0.2587 (0.2587)  evaluator_time: 0.0247 (0.0247)  time: 7.8346  data: 7.5238  max mem: 5065
Test:  [69/70]  eta: 0:00:01  model_time: 0.2239 (0.2354)  evaluator_time: 0.0104 (0.0143)  time: 1.4178  data: 1.1655  max mem: 5065
Test: Total time: 0:01:48 (1.5525 s / it)
Averaged stats: model_time: 0.2239 (0.2354)  evaluator_time: 0.0104 (0.0143)
Accumulating evaluation results...
DONE (t=0.11s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.433
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.738
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.471
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.433
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.666
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.669
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.669
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.669
*****Validation*****
Loss: 0.1407 | Classifier Loss: 0.0722 | Box Reg Loss: 0.0565 | RPN Box Reg Loss: 0.0048 | Objectness Loss: 0.0071
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:50  model_time: 0.2136 (0.2136)  evaluator_time: 0.0113 (0.0113)  time: 2.8072  data: 2.5580  max mem: 5065
Test:  [17/18]  eta: 0:00:00  model_time: 0.2213 (0.2338)  evaluator_time: 0.0120 (0.0281)  time: 0.4496  data: 0.1644  max mem: 5065
Test: Total time: 0:00:08 (0.4541 s / it)
Averaged stats: model_time: 0.2213 (0.2338)  evaluator_time: 0.0120 (0.0281)
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.250
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.466
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.190
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.250
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.538
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.542
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.542
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.542

  0%|          | 0/70 [00:00<?, ?it/s]
  0%|          | 0/18 [00:00<?, ?it/s]
Epoch: 18/18 | LR: 0.003000
*****Training*****
Loss: 0.0925 | Classifier Loss: 0.0440 | Box Reg Loss: 0.0430 | RPN Box Reg Loss: 0.0035 | Objectness Loss: 0.0019
creating index...
index created!
Test:  [ 0/70]  eta: 0:06:47  model_time: 0.2468 (0.2468)  evaluator_time: 0.0201 (0.0201)  time: 5.8202  data: 5.5294  max mem: 5206
Test:  [69/70]  eta: 0:00:01  model_time: 0.2280 (0.2321)  evaluator_time: 0.0093 (0.0121)  time: 1.3444  data: 1.0911  max mem: 5206
Test: Total time: 0:01:49 (1.5595 s / it)
Averaged stats: model_time: 0.2280 (0.2321)  evaluator_time: 0.0093 (0.0121)
Accumulating evaluation results...
DONE (t=0.10s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.455
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.749
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.513
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.455
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.664
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.668
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.668
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.668
*****Validation*****
Loss: 0.1639 | Classifier Loss: 0.0806 | Box Reg Loss: 0.0675 | RPN Box Reg Loss: 0.0048 | Objectness Loss: 0.0110
creating index...
index created!
Test:  [ 0/18]  eta: 0:00:52  model_time: 0.2408 (0.2408)  evaluator_time: 0.0115 (0.0115)  time: 2.9050  data: 2.6282  max mem: 5206
Test:  [17/18]  eta: 0:00:00  model_time: 0.2301 (0.2340)  evaluator_time: 0.0106 (0.0137)  time: 0.4293  data: 0.1580  max mem: 5206
Test: Total time: 0:00:07 (0.4333 s / it)
Averaged stats: model_time: 0.2301 (0.2340)  evaluator_time: 0.0106 (0.0137)
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.201
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.437
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.162
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.201
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.436
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.436
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.436
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.436
Best epoch in 16
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
In [29]:
import os
import pandas as pd
import torch
from torchvision.transforms import functional as F
from tqdm.notebook import tqdm
from PIL import Image


class TestDataset:
    def __init__(self, root, info_root, transforms=None):
        self.root = root
        self.transforms = transforms
        self.test_info = pd.read_csv(os.path.join(info_root, "test.csv"))

    def __len__(self):
        return len(self.test_info)

    def __getitem__(self, idx):
        
        file_name = self.test_info.iloc[idx]["Filename"]
        img_path = os.path.join(self.root, "test_images", file_name.replace(".dcm", ".jpg"))  # 確保對應到 .jpg
        if not os.path.exists(img_path):
            raise FileNotFoundError(f"Image file not found: {img_path}")
        image = Image.open(img_path).convert("RGB")
        
        width = self.test_info.iloc[idx]["Width"]
        height = self.test_info.iloc[idx]["Height"]
        
        if self.transforms:
            image = self.transforms(image)
        
        
        return self.test_info.iloc[idx]["ID"], image, width, height


def inference_on_test_set(model, test_loader, device):
    model.eval()
    results = []
    
    with torch.no_grad():
        for img_ids, images, widths, heights in tqdm(test_loader):
            
            images = [img.to(device) for img in images]
            outputs = model(images)  # 得到 [ { 'boxes':..., 'labels':..., 'scores':... }, ... ]
            
            
            for img_id, output, img, w, h in zip(img_ids, outputs, images, widths, heights):
                w, h = float(w), float(h)  
                
                
                for box, label, score in zip(output["boxes"], 
                                             output["labels"], 
                                             output["scores"]):
                    if score < 0.5:  
                        continue
                    
                    
                    category = config.categories[label.item() - 1]
                    
                    
                    if category == "normal":
                        continue
                    
                    
                    xmin, ymin, xmax, ymax = box.tolist()
                    xmin, xmax = xmin / w, xmax / w
                    ymin, ymax = ymin / h, ymax / h
                    
                    
                    results.append({
                        "ID": img_id,
                        "category": category,
                        "score": score.item(),
                        "xmin": xmin,
                        "xmax": xmax,
                        "ymin": ymin,
                        "ymax": ymax
                    })
    return results


def save_results_to_csv(results, output_path):
    df = pd.DataFrame(results, columns=["ID","category","score","xmin","xmax","ymin","ymax"])
    df.to_csv(output_path, index=False)
    print(f"Results saved to {output_path}")


def main():
    
    device = config.device

    
    model = fasterrcnn(num_classes=config.num_classes)
    
    
    checkpoint = torch.load(os.path.join(config.save_root, "final.pth"), map_location=device)
    model.load_state_dict(checkpoint["model"])
    model.to(device)

    
    test_dataset = TestDataset(
        root=config.test_root, 
        info_root=config.info_root_test,
        transforms=F.to_tensor
    )
    
    test_loader = torch.utils.data.DataLoader(
        test_dataset,
        batch_size=1,  
        shuffle=False,
        collate_fn=lambda x: tuple(zip(*x))  
    )

    
    print("Running inference on test set...")
    results = inference_on_test_set(model, test_loader, device)

    
    output_csv = os.path.join(config.save_root, "submission.csv")
    save_results_to_csv(results, output_csv)

if __name__ == "__main__":
    
    class config:
        test_root = "/kaggle/input/dlmia-hw05-test"
        info_root_test = "/kaggle/input/dlmia-hw05-test"
        save_root = "/kaggle/working"
        device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
        num_classes = 8
        categories = [
            "aortic_curvature",
            "aortic_atherosclerosis_calcification",
            "cardiac_hypertrophy",
            "intercostal_pleural_thickening",
            "lung_field_infiltration",
            "degenerative_joint_disease_of_the_thoracic",
            "scoliosis",
            "normal"
        ]
    
    main()
<ipython-input-29-359948ca1d9f>:96: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
  checkpoint = torch.load(os.path.join(config.save_root, "final.pth"), map_location=device)
Running inference on test set...
  0%|          | 0/113 [00:00<?, ?it/s]
Results saved to /kaggle/working/submission.csv
In [30]:
import pandas as pd

submission_file = "/kaggle/working/submission.csv"  # 確保此路徑正確
pred_df = pd.read_csv(submission_file)

print("First 10 rows of predictions:")
print(pred_df.head(10))

print("\nLast 10 rows of predictions:")
print(pred_df.tail(10))

print("\nShape of the predictions DataFrame:")
print(pred_df.shape)
First 10 rows of predictions:
                      ID                                    category  \
0  TDR02_20161123_145314        aortic_atherosclerosis_calcification   
1  TDR02_20161123_145314  degenerative_joint_disease_of_the_thoracic   
2  TDR02_20161123_145314                     lung_field_infiltration   
3  TDR02_20161123_145314                            aortic_curvature   
4  TDR01_20171106_111727  degenerative_joint_disease_of_the_thoracic   
5  TDR01_20171106_111727                                   scoliosis   
6  TDR01_20180510_090210  degenerative_joint_disease_of_the_thoracic   
7  TDR01_20180510_090210                                   scoliosis   
8  TDR01_20180511_092549                                   scoliosis   
9  TDR01_20180511_092549  degenerative_joint_disease_of_the_thoracic   

      score      xmin      xmax      ymin      ymax  
0  0.719621  0.522589  0.668645  0.210334  0.404884  
1  0.696984  0.398186  0.679873  0.028602  0.768943  
2  0.687806  0.061978  0.971227  0.036266  0.857390  
3  0.537114  0.396124  0.677786  0.187254  0.753295  
4  0.772386  0.364870  0.653363  0.046136  0.770278  
5  0.610582  0.411904  0.623745  0.196701  0.804504  
6  0.729289  0.371451  0.648256  0.079537  0.846000  
7  0.593864  0.410890  0.618509  0.262055  0.771504  
8  0.592088  0.404281  0.617436  0.168468  0.776159  
9  0.571634  0.362252  0.649401  0.048530  0.820701  

Last 10 rows of predictions:
                        ID                                    category  \
247  TDR02_20161125_122319              intercostal_pleural_thickening   
248  TDR02_20180123_115426              intercostal_pleural_thickening   
249  TDR02_20180123_115426  degenerative_joint_disease_of_the_thoracic   
250  TDR02_20180123_115426                                   scoliosis   
251  TDR02_20180123_115426                     lung_field_infiltration   
252  TDR02_20161118_145330        aortic_atherosclerosis_calcification   
253  TDR02_20161118_145330                     lung_field_infiltration   
254  TDR02_20161118_145330                            aortic_curvature   
255  TDR02_20161118_145330                         cardiac_hypertrophy   
256  TDR02_20161118_145330  degenerative_joint_disease_of_the_thoracic   

        score      xmin      xmax      ymin      ymax  
247  0.638258  0.183890  0.913690  0.062068  0.341851  
248  0.681366  0.163627  0.916379  0.067985  0.391076  
249  0.658080  0.346345  0.680156  0.035037  0.802507  
250  0.654130  0.406345  0.612337  0.193573  0.820105  
251  0.531416  0.025018  0.973885  0.055201  0.895695  
252  0.770725  0.427432  0.595712  0.243232  0.411891  
253  0.751855  0.056390  0.952187  0.066171  0.819678  
254  0.673468  0.297735  0.621747  0.213596  0.688653  
255  0.568339  0.272086  0.780762  0.327880  0.730181  
256  0.543495  0.309093  0.610787  0.041648  0.732416  

Shape of the predictions DataFrame:
(257, 7)
In [31]:
import warnings
warnings.filterwarnings('ignore')

import os
import random
import numpy as np
import pandas as pd

# visualization
import cv2
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
!pip install grad-cam
import pytorch_grad_cam
from pytorch_grad_cam import EigenCAM, AblationCAM
from pytorch_grad_cam.ablation_layer import AblationLayerFasterRCNN
from pytorch_grad_cam.utils.model_targets import FasterRCNNBoxScoreTarget
from pytorch_grad_cam.utils.reshape_transforms import fasterrcnn_reshape_transform
from pytorch_grad_cam.utils.image import show_cam_on_image

# PyTorch
import torch
import torchvision
from torchvision import models
from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
from torchvision.transforms import v2
Collecting grad-cam
  Downloading grad-cam-1.5.4.tar.gz (7.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.8/7.8 MB 55.4 MB/s eta 0:00:0000:0100:01
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from grad-cam) (1.26.4)
Requirement already satisfied: Pillow in /usr/local/lib/python3.10/dist-packages (from grad-cam) (10.4.0)
Requirement already satisfied: torch>=1.7.1 in /usr/local/lib/python3.10/dist-packages (from grad-cam) (2.4.1+cu121)
Requirement already satisfied: torchvision>=0.8.2 in /usr/local/lib/python3.10/dist-packages (from grad-cam) (0.19.1+cu121)
Collecting ttach (from grad-cam)
  Downloading ttach-0.0.3-py3-none-any.whl.metadata (5.2 kB)
Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from grad-cam) (4.66.5)
Requirement already satisfied: opencv-python in /usr/local/lib/python3.10/dist-packages (from grad-cam) (4.10.0.84)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (from grad-cam) (3.7.1)
Requirement already satisfied: scikit-learn in /usr/local/lib/python3.10/dist-packages (from grad-cam) (1.2.2)
Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.7.1->grad-cam) (3.16.1)
Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.7.1->grad-cam) (4.12.2)
Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch>=1.7.1->grad-cam) (1.13.3)
Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=1.7.1->grad-cam) (3.3)
Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.7.1->grad-cam) (3.1.4)
Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch>=1.7.1->grad-cam) (2024.6.1)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->grad-cam) (1.3.0)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib->grad-cam) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->grad-cam) (4.53.1)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->grad-cam) (1.4.7)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->grad-cam) (24.1)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->grad-cam) (3.1.4)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib->grad-cam) (2.8.2)
Requirement already satisfied: scipy>=1.3.2 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->grad-cam) (1.13.1)
Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->grad-cam) (1.4.2)
Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->grad-cam) (3.5.0)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib->grad-cam) (1.16.0)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.7.1->grad-cam) (2.1.5)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy->torch>=1.7.1->grad-cam) (1.3.0)
Downloading ttach-0.0.3-py3-none-any.whl (9.8 kB)
Building wheels for collected packages: grad-cam
  Building wheel for grad-cam (pyproject.toml) ... done
  Created wheel for grad-cam: filename=grad_cam-1.5.4-py3-none-any.whl size=39588 sha256=16c921b175d7f4d8ebd628bd038349d74158c096813c3ada961013169f755ba8
  Stored in directory: /root/.cache/pip/wheels/50/b0/82/1f97b5348c7fe9f0ce0ba18497202cafa5dec4562bd5292680
Successfully built grad-cam
Installing collected packages: ttach, grad-cam
Successfully installed grad-cam-1.5.4 ttach-0.0.3
In [32]:
class config:
    
    root = "/kaggle/input/dlmia-hw05-new"
    num_classes = 8
    categories = ['normal', 'aortic_curvature', 'aortic_atherosclerosis_calcification', 
                  'cardiac_hypertrophy', 'intercostal_pleural_thickening', 'lung_field_infiltration', 
                  'degenerative_joint_disease_of_the_thoracic_spine', 'scoliosis']
    seed = 42
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
In [33]:
def seed_everything(seed):
    # Set Python random seed
    random.seed(seed)
    
    # Set NumPy random seed
    np.random.seed(seed)
    
    # Set PyTorch random seed for CPU and GPU
    torch.manual_seed(seed)
    if torch.cuda.is_available():
        torch.cuda.manual_seed_all(seed)
    
    # Set PyTorch deterministic operations for cudnn backend
    torch.backends.cudnn.deterministic = True
    torch.backends.cudnn.benchmark = True
    
seed_everything(config.seed)
In [34]:
def fasterrcnn(num_classes):
    model = models.detection.fasterrcnn_resnet50_fpn()
    in_features = model.roi_heads.box_predictor.cls_score.in_features
    model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)

    return model
In [35]:
def predict(input_tensor, model, device, detection_threshold):
    outputs = model(input_tensor)
    pred_classes = [config.categories[i] for i in outputs[0]['labels'].cpu().numpy()]
    pred_labels = outputs[0]['labels'].cpu().numpy()
    pred_scores = outputs[0]['scores'].detach().cpu().numpy()
    pred_bboxes = outputs[0]['boxes'].detach().cpu().numpy()
    
    boxes, classes, labels, indices,scores = [], [], [], [], []
    for index in range(len(pred_scores)):
        if pred_scores[index] >= detection_threshold:
            boxes.append(pred_bboxes[index].astype(np.int32))
            classes.append(pred_classes[index])
            labels.append(pred_labels[index])
            indices.append(index)
            scores.append(pred_scores[index])
    boxes = np.int32(boxes)
    
    return boxes, classes, labels, indices, scores

COLORS = np.random.uniform(0, 255, size=(len(config.categories), 3))

def draw_boxes(boxes, labels, classes, image):
    for i, box in enumerate(boxes):
        # Convert RGB to BGR for OpenCV
        color = COLORS[labels[i]].astype(int)[::-1]
        
        # Draw the bounding box
        cv2.rectangle(
            image,
            (int(box[0]), int(box[1])),
            (int(box[2]), int(box[3])),
            color.tolist(), 8
        )
        
        # Increase font size and thickness for label
        font_scale = 4 # Increase this value for larger font
        thickness = 10     # Increase thickness for better visibility
        
        # Add class label as text
        cv2.putText(image, classes[i], 
                    (int(box[0]), int(box[1]) - 10),  # Adjust text position
                    cv2.FONT_HERSHEY_SIMPLEX, 
                    font_scale, 
                    color.tolist(), 
                    thickness,
                    lineType=cv2.LINE_AA)
    return image
In [36]:
def get_transform():
    
    transform = v2.Compose(
                [
                    v2.ToImage(), ## Used while using PIL image
                    #v2.ConvertBoundingBoxFormat(tv_tensors.BoundingBoxFormat.XYXY),
                    v2.ToDtype(torch.float32, scale=True),
                    
                ])       
    
    return transform
In [37]:
from torchvision.transforms.v2 import functional as F
In [38]:
def plot_eigen_cam_images(transforms, model, cat, threshold):
    rows, cols = 4, 2
    fig = plt.figure(figsize=(10, 20))  # Adjust figure size
    grid = plt.GridSpec(rows, cols)

    
    best_ckpt = torch.load("/kaggle/working/final.pth", map_location=config.device)
    model.load_state_dict(best_ckpt["model"])
    model.eval().to(config.device)
    target_layers = [model.backbone]

    cam = EigenCAM(
        model, 
        target_layers, 
        reshape_transform=fasterrcnn_reshape_transform
    )

    for i in range(rows * cols):
        
        all_images = os.listdir(os.path.join(config.root, config.categories[i]))        
        image_path = os.path.join(config.root, config.categories[i], all_images[0])
        image = Image.open(image_path).convert("RGB")   
        
        
        input_tensor = transforms(image)
        input_tensor = input_tensor.to(config.device)
        input_tensor = input_tensor.unsqueeze(0)
        image = np.array(image)
        image_float_np = np.float32(image) / 255

        
        boxes, classes, labels, indices, scores = predict(input_tensor, model, config.device, threshold)        
        image = draw_boxes(boxes, labels, classes, image)
        targets = [FasterRCNNBoxScoreTarget(labels=labels, bounding_boxes=boxes)]
        
        
        grayscale_cam = cam(input_tensor, targets=targets)
        grayscale_cam = grayscale_cam[0, :]
        cam_image = show_cam_on_image(image_float_np, grayscale_cam, use_rgb=True)
        image_with_bounding_boxes = draw_boxes(boxes, labels, classes, cam_image)

       
        categories = fig.add_subplot(grid[i])
        categories.set_axis_off()

        gs = gridspec.GridSpecFromSubplotSpec(1, 1, subplot_spec=grid[i])
        ax = fig.add_subplot(gs[0])
        ax.imshow(image_with_bounding_boxes)
        ax.set_title(f"{config.categories[i]}")
        ax.axis("off")

    
    fig.patch.set_facecolor('white')
    fig.suptitle("EigenCAM Images of 8 categories\n", fontweight='bold', size=16)
    fig.tight_layout()
    fig.subplots_adjust(wspace=0.2, hspace=0.4)  # Add extra space between plots
In [39]:
def plot_ablation_cam_images(transforms, model):
    
    rows, cols = 4, 2
    fig = plt.figure(figsize = (10, 20))
    grid = plt.GridSpec(rows, cols)
    
    best_ckpt = torch.load("/kaggle/working/final.pth", map_location = config.device)
    model.load_state_dict(best_ckpt["model"])
    model.eval().to(config.device)
    target_layers = [model.backbone]
    
    cam = AblationCAM(model,
                      target_layers,
                      reshape_transform = fasterrcnn_reshape_transform,
                      ablation_layer = AblationLayerFasterRCNN(),
                      ratio_channels_to_ablate = 1.0)
    
    for i in range(rows * cols):
        
        all_images = os.listdir(os.path.join(config.root, config.categories[i]))
        image_path = os.path.join(config.root, config.categories[i], all_images[0])
        image = Image.open(image_path).convert("RGB")       
        input_tensor = transforms(image)
        input_tensor = input_tensor.to(config.device)
        input_tensor = input_tensor.unsqueeze(0)
        image = np.array(image)
        image_float_np = np.float32(image) / 255

        boxes, classes, labels, indices, scores = predict(input_tensor, model, config.device, 0)
        image = draw_boxes(boxes, labels, classes, image)
        targets = [FasterRCNNBoxScoreTarget(labels = labels, bounding_boxes = boxes)]
        
        grayscale_cam = cam(input_tensor, targets = targets)
        grayscale_cam = grayscale_cam[0, :]
        cam_image = show_cam_on_image(image_float_np, grayscale_cam, use_rgb = True)
        image_with_bounding_boxes = draw_boxes(boxes, labels, classes, cam_image)
        
        categories = fig.add_subplot(grid[i])
        categories.set_axis_off()
        
        gs = gridspec.GridSpecFromSubplotSpec(1, 1, subplot_spec = grid[i])
        
        ax = fig.add_subplot(gs[0])
        ax.imshow(image_with_bounding_boxes)
        ax.set_title(f"{config.categories[i]}")
        ax.axis("off")
        
    fig.patch.set_facecolor('white')
    fig.suptitle("AblationCAM Images of 8 categories\n", fontweight = 'bold', size = 16)
    fig.tight_layout()
In [42]:
result = plot_eigen_cam_images(transforms = get_transform(), model = fasterrcnn(config.num_classes), cat=0, threshold=0)
No description has been provided for this image
In [43]:
model = fasterrcnn(config.num_classes)
result_fig = plot_ablation_cam_images(
    transforms = get_transform(),
    model = model
)
100%|██████████| 40/40 [00:28<00:00,  1.39it/s]
100%|██████████| 40/40 [00:35<00:00,  1.12it/s]
100%|██████████| 40/40 [00:35<00:00,  1.12it/s]
100%|██████████| 40/40 [00:34<00:00,  1.15it/s]
100%|██████████| 40/40 [00:32<00:00,  1.22it/s]
100%|██████████| 40/40 [00:32<00:00,  1.23it/s]
100%|██████████| 40/40 [00:29<00:00,  1.36it/s]
100%|██████████| 40/40 [00:29<00:00,  1.35it/s]
No description has been provided for this image
In [ ]: